package cn.psvmc.cxzapi.service.market;

import cn.psvmc.cxzapi.config.mybatisplus.service.impl.AbstractService;
import cn.psvmc.cxzapi.exception.ServiceException;
import cn.psvmc.cxzapi.mapper.market.TBanner2Mapper;
import cn.psvmc.cxzapi.model.common.MarketEntity;
import cn.psvmc.cxzapi.model.market.TBanner2;
import cn.psvmc.cxzapi.util.ToolUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * 1+2Banner 实例表 服务实现类
 * @Author auto
 * @Date 2024-08-13
 */
@Service
public class TBanner2Service extends AbstractService<TBanner2Mapper, TBanner2> {

    @Resource
    private TBanner2Mapper tBanner2Mapper;

    /**
    * @Date auto 2024-08-13 新增1+2Banner 实例表
    * @Param tBanner2 1+2Banner 实例表
    * @Return int
    */
    public void add(TBanner2 tBanner2) {
        Integer bannerPosition = tBanner2.getBannerPosition();
        if (bannerPosition.equals(1)) {//左边的可以多张
            tBanner2Mapper.insert(tBanner2);
            return;
        }
        //中间和右边的替换
        Integer bannerId = tBanner2Mapper.getIdByUserIdAndPosition(bannerPosition);//根据用户id和位置获取实例id
        if (ToolUtils.isTrueInteger(bannerId)) {//如果要添加的位置已经有实例，更新以前的实例
            tBanner2.setBannerId(bannerId);
            tBanner2Mapper.updateById(tBanner2);
        } else {//如果要添加的位置没有实例，直接添加本实例
            tBanner2Mapper.insert(tBanner2);
        }
    }

    /**
    * @Date auto 2024-08-13 更新1+2Banner 实例表
    * @Param tBanner2 1+2Banner 实例表模型
    * @Return int
    */
    public void edit(TBanner2 tBanner2) {
        // 通过id查询数据处理 详情
        TBanner2 originTBanner2 = this.detail(tBanner2.getBannerId());
        if (originTBanner2 == null) {
            throw new ServiceException("未查询到对应的1+2Banner 实例表信息！");
        }

        // 比较数据版本号
        if (!originTBanner2.getRversion().equals(tBanner2.getRversion())) {
            throw new ServiceException("数据已更新，请刷新后重试！");
        }
        Integer bannerPosition = tBanner2.getBannerPosition();
        if (ToolUtils.isTrueInteger(bannerPosition) && !originTBanner2.getBannerPosition().equals(bannerPosition)) {
            if (bannerPosition.equals(1)) {
                tBanner2Mapper.updateById(tBanner2);
                return;
            }
            Integer bannerId = tBanner2Mapper.getIdByUserIdAndPosition(bannerPosition);//根据用户id和位置获取实例id
            if (ToolUtils.isTrueInteger(bannerId)) {//如果要修改的位置已经有实例，先删除本实例在更新以前的实例
                tBanner2Mapper.deleteById(tBanner2.getBannerId());
                tBanner2.setBannerId(bannerId);
                tBanner2Mapper.updateById(tBanner2);
            } else {//如果要修改的位置没有实例，直接更新本实例
                tBanner2Mapper.updateById(tBanner2);
            }
        } else {
            // 字段为null 不更新
            tBanner2Mapper.updateById(tBanner2);
        }
    }

    /**
    * @Date auto 2024-08-13 查询1+2Banner 实例表详情
    * @Param id 唯一id
    * @Return cn.psvmc.cxzapi.model.market.TBanner2
    */
    public TBanner2 detail(Integer id){
        return tBanner2Mapper.selectById(id);
    }

    /**
    * @Date auto 2024-08-13 删除1+2Banner 实例表
    * @Param id 唯一id
    * @Param rversion 版本号
    * @Return int
    */
    public int delete(Integer id, Integer rversion){
        // 查询1+2Banner 实例表详情
        TBanner2 tBanner2 = this.detail(id);
        if(tBanner2 == null){
            throw new ServiceException("未查询到对应的1+2Banner 实例表信息！");
        }

        // 比较数据版本号
        if(!rversion.equals(tBanner2.getRversion())){
            throw new ServiceException("数据已更新，请刷新后重试！");
        }

        return tBanner2Mapper.deleteById(id);
    }

    /**
     * @Description 列表
     * @Date 2024/8/13 17:06
     * @Author YWX
     * @Param []
     * @Return java.util.List<java.util.Map>
     **/
    public List<Map> listAll(MarketEntity entity){
        return tBanner2Mapper.listAll(entity);
    }
}
